
package com.kugou.game.sdk.statistics;

import com.kugou.game.sdk.core.SDKControler;

import android.content.Context;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 描述:数据统计发送管理类
 *
 * @author jerryliu
 * @since 2015年11月17日 下午2:30:54
 */
public class StaticsManager {
    // 线程池
    private static ExecutorService mExecutorService = Executors.newCachedThreadPool();

    public static void sendStatics(final AbsStatisticsTask task) {
        try {
            if (task != null) {
                mExecutorService.execute(new Runnable() {
                    @Override
                    public void run() {
                        task.execute();
                    }
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 发送通用统计
     * 
     * @param statid 统计id
     */
    public static void sendCommonStatis(int statid) {
        StatCommonTask task = new StatCommonTask(SDKControler.getContext(), statid);
        sendStatics(task);
    }

    /**
     * 发送应用启动统计
     */
    public static void sendAppStartStatics() {
        StatAppStartTask task = new StatAppStartTask(SDKControler.getContext());
        sendStatics(task);
    }

    /**
     * 发送游戏操作统计（进入游戏、退出游戏、游戏等级变化）
     * 
     * @param rolename 角色名
     * @param rolelevel 角色等级
     * @param statid 统计项id
     */
    public static void sendGameOperationStatics(String rolename, int rolelevel, int statid) {
        StatGameOperationTask task = new StatGameOperationTask(SDKControler.getContext(), rolename,
                rolelevel, statid);
        sendStatics(task);
    }

    /**
     * 发送H5游戏中心下载统计
     * 
     * @param context
     * @param positionid 下载来源
     * @param itemid 统计项 如：下载完成是否有暂停
     * @param statvalue 统计值，如下载速度。默认0
     * @param errorcode 错误码 。默认0
     * @param errorlog 错误信息
     * @param mid
     * @param uuid
     */
    public static void sendGameCenterDownloadStatics(Context context, String gameid,
            String positionid, int itemid, String statvalue, int errorcode, String errorlog,
            String mid, String uuid, String kugouid, String kugoutoken, long clientAppid,
            String statparams) {
        StatGameCenterDownloadTask task = new StatGameCenterDownloadTask(context, gameid,
                positionid, itemid, statvalue, errorcode, errorlog, mid, uuid, kugouid, kugoutoken,
                clientAppid, statparams);
        sendStatics(task);
    }

    /**
     * 发送H5游戏中心DAU统计
     * 
     * @param context
     */
    public static void sendGameCenterDauStatics(Context context) {
        StatGameCenterDAUTask task = new StatGameCenterDAUTask(context);
        sendStatics(task);
    }

    /**
     * 自动识别手机号码
     * 
     * @param statid
     * @param optype
     */
    public static void sendAutoReadPhoneStatics(int statid, int optype) {
        StatAutoReadPhoneNumTask task = new StatAutoReadPhoneNumTask(SDKControler.getContext(),
                statid, optype);
        sendStatics(task);
    }

    /**
     * 发送崩溃统计
     * 
     * @param crashLog 崩溃日志
     * @param optype 1：sdk 2：游戏
     */
    public static void sendSdkCrashStatics(String crashLog, int optype) {
        StatSdkCrashTask task = new StatSdkCrashTask(SDKControler.getContext(), crashLog, optype);
        sendStatics(task);
    }

    /**
     * 发送补丁日志统计
     * 
     * @param optype 1：成功 2：失败
     * @param patchId 补丁id
     * @param errorLog 日志
     */
    public static void sendPatchLogStatics(Context context, int optype, int patchId, String errorLog) {
        StatPatchLogTask task = new StatPatchLogTask(context, optype, patchId, errorLog);
        sendStatics(task);
    }

    /**
     * 发送广告统计
     * 
     * @param statid
     * @param optype1：定时广告2：弹窗广告
     * @param adid
     */
    public static void sendSinleAdStatics(int statid, int optype, int adid) {
        StatAdTask task = new StatAdTask(SDKControler.getContext(), statid, optype, adid);
        sendStatics(task);
    }

    /**
     * 发送推送统计
     * 
     * @param statid
     * @param msgid 消息id
     */
    public static void sendPushMessageStatics(int statid, int msgid) {
        StatPushMessageTask task = new StatPushMessageTask(SDKControler.getContext(), statid, msgid);
        sendStatics(task);
    }

    /**
     * 发送统计-进入充值列表界面
     * 
     * @param optype充值流向：1：充值游币2：游戏充值
     * @param sourceid 进入充值游币来源：1：用户中心-充值按钮2：用户中心-banner3：游戏支付活动 4：sdk
     *            h5活动页banner5:用户中心-成为vip按钮6:代金券页面-限游币充值代金券
     */
    public static void sendEnterRechargeListStatics(int optype, int sourceid) {
        StatEnterRechargeListTask task = new StatEnterRechargeListTask(SDKControler.getContext(),
                optype, sourceid);
        sendStatics(task);
    }

    /**
     * 选择充值方式
     * 
     * @param statid 统计项
     * @param optype 充值流向：1：游币充值2：游戏充值
     * @param paytype29：支付宝 34：银行卡28：充值卡0：游币43：游戏点卡44：话费充值
     */
    public static void sendRechargeTypeStatics(int statid, int optype, int paytype) {
        StatSelectRechargeTypeTask task = new StatSelectRechargeTypeTask(SDKControler.getContext(),
                statid, optype, paytype);
        sendStatics(task);
    }

    /**
     * 点击支付界面的确认支付按钮
     * 
     * @param optype充值流向：1：游币充值2：游戏充值
     * @param paytype29：支付宝 34：银行卡28：充值卡0：游币43：游戏点卡44：话费充值
     * @param paymoney选择充值的金额
     */
    public static void sendClickRechargeStatics(int optype, int paytype, int paymoney) {
        StatClickRechargeOkBtnTask task = new StatClickRechargeOkBtnTask(SDKControler.getContext(),
                optype, paytype, paymoney);
        sendStatics(task);
    }

    /**
     * 充值成功统计
     * 
     * @param optype充值流向：1：游币充值2：游戏充值
     * @param paytype29：支付宝 34：银行卡28：充值卡0：游币43：游戏点卡44：话费充值
     * @param paymoney选择充值的金额
     * @param orderid 订单号
     */
    public static void sendRechargeSuccessStatics(int optype, int paytype, int paymoney,
            String orderid) {
        StatRechargeSuccessTask task = new StatRechargeSuccessTask(SDKControler.getContext(),
                optype, paytype, paymoney, orderid);
        sendStatics(task);
    }

    /**
     * 取消支付或支付错误统计
     * 
     * @param statid 统计项
     * @param optype充值流向：1：游币充值2：游戏充值
     * @param paytype29：支付宝 34：银行卡28：充值卡0：游币43：游戏点卡44：话费充值
     * @param paymoney选择充值的金额
     * @param orderid 订单号
     * @param errorlog 错误日志
     */
    public static void sendCancelRechargeStatics(int statid, int optype, int paytype, int paymoney,
            String orderid, String errorlog) {
        StatCancelRechargeTask task = new StatCancelRechargeTask(SDKControler.getContext(), statid,
                optype, paytype, paymoney, orderid, errorlog);
        sendStatics(task);
    }
}
